package org.lds.hotkey.common.util;

import org.apache.commons.collections4.MapUtils;

import java.util.*;

public class MapUtil {

    /**
     * 将key和value填充到map
     * @param map
     * @param key
     * @param value
     * @param <K>
     * @param <V>
     */
    public static <K,V> void fillListMap(Map<K, List<V>> map, K key, V value) {
        List<V> list = map.get(key);
        if (list == null) {
            list = new ArrayList<>();
            list.add(value);
            map.put(key, list);
        } else {
            list.add(value);
        }
    }

    /**
     * 将key和value填充到map
     * @param map
     * @param key
     * @param value
     * @param <K>
     * @param <V>
     */
    public static <K,V> void fillSetMap(Map<K, Set<V>> map, K key, V value) {
        if (map == null || key == null || value == null) return;
        Set<V> list = map.get(key);
        if (list == null) {
            list = new HashSet<>();
            list.add(value);
            map.put(key, list);
        } else {
            list.add(value);
        }
    }

    public static <K1,K,V> void fillMapMap(Map<K1, Map<K, V>> map, K1 key1, K key, V value) {
        if (map == null || key1 == null || key == null || value == null) return;
        Map<K, V> kvMap = map.get(key1);
        if (kvMap == null) {
            kvMap = new HashMap<>();
            kvMap.put(key, value);
            map.put(key1, kvMap);
        } else {
            kvMap.put(key, value);
        }
    }

    public static <K1,K,V> void removeMapMap(Map<K1, Map<K, V>> map, K1 key1, K key) {
        if (map == null || key1 == null || key == null) return;
        Map<K, V> kvMap = map.get(key1);
        if (MapUtils.isEmpty(kvMap)) return;
        kvMap.remove(key);
    }


    /**
     * 将key和value从map中移除
     * @param map
     * @param key
     * @param value
     * @param <K>
     * @param <V>
     */
    public static <K,V> void removeSetMap(Map<K, Set<V>> map, K key, V value) {
        if (map == null || key == null || value == null) return;
        Set<V> set = map.get(key);
        if (set == null || set.isEmpty()) return;
        set.remove(value);
    }

}
